
  CREATE OR REPLACE PACKAGE BODY "CONNEG"."PQ_OPERATORIA" AS

/***************************************************************************************************
-- APERTURA
****************************************************************************************************/

PROCEDURE SP_APERTURA_CARGAR(P_OFICINA_ID IN VARCHAR2, P_TERMINAL_ID IN VARCHAR2, P_TIPO_ID IN INTEGER, P_CAJAS_RS OUT SYS_REFCURSOR, P_MONTOS_RS OUT SYS_REFCURSOR)
IS
BEGIN

OPEN P_CAJAS_RS
FOR
SELECT NVL(CAJ.CAJA_ID, 0)          cajaId,
       DIV.DIVISA_ID                divisaId,
       NVL(CAJ.ESTADO_ID, G_ESTADO_CAJA_POR_APERTURAR) estadoId,
       NVL(OPE.MONTO_DETERIORADO,0) montoDeteriorados,
       NVL(OPE.PATRON_CALIDAD,0)    patronCalidad,
       NVL(OPE.MONTO_TOTAL,0)       montoTotal
FROM   (
       SELECT CODIGOPARAMETRO DIVISA_ID FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
       ) DIV
       LEFT JOIN
       CONNEG.CAJA CAJ
ON     CAJ.OFICINA_ID  = P_OFICINA_ID
AND    CAJ.TERMINAL_ID = P_TERMINAL_ID
AND    CAJ.TIPO_ID     = P_TIPO_ID
AND    CAJ.DIVISA_ID   = DIV.DIVISA_ID
       LEFT JOIN
       CONNEG.CAJA_OPERACION OPE
ON     CAJ.APERTURA_ID = OPE.OPERACION_ID;

OPEN P_MONTOS_RS
FOR
SELECT DEN.DENOMINACION_ID /*NVL(DIV.SECUENCIA_ID,0)*/ secuenciaId,
       NVL(CAJ.CAJA_ID, 0)     cajaId,
       PDV.DIVISA_ID           divisaId,
       TIP.CODIGOPARAMETRO     tipoId,
       DEN.VALOR_TEXTO         valorTexto,
       DEN.VALOR_NUMERICO      valorNumerico,
       NVL(DIV.VALOR,0)        valorIngresado
FROM   (
       SELECT CODIGOPARAMETRO DIVISA_ID FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
       ) PDV
       LEFT JOIN
       CONNEG.DIVISA_DENOMINACION DEN
ON     DEN.DIVISA_ID = PDV.DIVISA_ID
       LEFT JOIN
       CONNEG.PARAMETRO TIP
ON     DEN.TIPO_ID         = TIP.CODIGOPARAMETRO
       LEFT JOIN
       CONNEG.CAJA CAJ
ON     CAJ.OFICINA_ID  = P_OFICINA_ID
AND    CAJ.TERMINAL_ID = P_TERMINAL_ID
AND    CAJ.TIPO_ID     = P_TIPO_ID
AND    CAJ.DIVISA_ID   = PDV.DIVISA_ID
       LEFT JOIN
       CONNEG.CAJA_OPERACION_DIVDEN DIV
ON     DIV.OPERACION_ID    = CAJ.APERTURA_ID
AND    DIV.DENOMINACION_ID = DEN.DENOMINACION_ID
ORDER BY 1, DEN.TIPO_ID, DEN.VALOR_NUMERICO DESC;

END;

PROCEDURE SP_APERTURA_GRABAR (
  P_XML         IN CLOB,
  P_USUARIO_REG IN VARCHAR2,
  P_FECHA_REG   IN DATE,
  P_ERROR      OUT VARCHAR2
)
IS
  L_OPERACION_ID INTEGER;
  L_SECUENCIA_ID INTEGER;
  L_CAJA_TRASPASO_ID INTEGER;
  L_CAJA_ESTADO_ID INTEGER;
BEGIN

--1.- RECORREMOS LAS OPERACIONES DE LA CAJA PARA REGISTRARLAS
FOR OPE IN
(
SELECT extractValue(value(T), 'CAJA/CAJA_ID')      CAJA_ID,
       extractValue(value(T), 'CAJA/TIPO_ID')      TIPO_ID,
       extractValue(value(T), 'CAJA/DIVISA_ID')    DIVISA_ID,
       extractValue(value(T), 'CAJA/TERMINAL_ID')  TERMINAL_ID,
       extractValue(value(T), 'CAJA/OFICINA_ID')   OFICINA_ID,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_DET'),  G_FORMATO_NUMERO) MONTO_DET,
       TO_NUMBER(extractValue(value(T), 'CAJA/PATRON_CAL'), G_FORMATO_NUMERO) PATRON_CAL,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_TOT'),  G_FORMATO_NUMERO) MONTO_TOT
FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA'))) T
)
LOOP
  --1.1.- REGISTRAMOS LA CAJA SEGUN CORRESPONDA
  IF OPE.CAJA_ID = 0 THEN
    SELECT CONNEG.SQ_CAJA.NEXTVAL INTO OPE.CAJA_ID FROM DUAL;
    
    INSERT INTO CONNEG.CAJA (CAJA_ID, TIPO_ID, OFICINA_ID, TERMINAL_ID, DIVISA_ID, APERTURA_ID, CIERRE_ID, ESTADO_ID)
    VALUES (OPE.CAJA_ID,OPE.TIPO_ID,OPE.OFICINA_ID,OPE.TERMINAL_ID,OPE.DIVISA_ID, NULL, NULL, G_ESTADO_CAJA_POR_APERTURAR);
  END IF;
  
  --1.2.- REGISTRAMOS LA OPERACION DE LA CAJA
  SELECT CONNEG.SQ_CAJA_OPE.NEXTVAL INTO L_OPERACION_ID FROM DUAL;
  
  INSERT INTO CONNEG.CAJA_OPERACION (OPERACION_ID, CAJA_ID, TRANSACCION_ID, MONTO_DETERIORADO, PATRON_CALIDAD, MONTO_TOTAL, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
  VALUES (L_OPERACION_ID,OPE.CAJA_ID,G_TRANSACCION_APERTURA,OPE.MONTO_DET,OPE.PATRON_CAL,OPE.MONTO_TOT,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  
  --1.3.- REGISTRAMOS LOS MONTOS DE LAS DENOMINACIONES DE LA OPERACION
  FOR DENO IN
  (
  SELECT extractValue(value(T), 'DENOMINACION/DENOMINACION_ID') DENOMINACION_ID,
         TO_NUMBER(extractValue(value(T), 'DENOMINACION/MONTO'),  G_FORMATO_NUMERO) MONTO
  FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA/DENOMINACIONES/DENOMINACION'))) T
  )
  LOOP
    SELECT CONNEG.SQ_CAJA_OPE_DD.NEXTVAL INTO L_SECUENCIA_ID FROM DUAL;
    
    INSERT INTO CONNEG.CAJA_OPERACION_DIVDEN (SECUENCIA_ID, OPERACION_ID, DENOMINACION_ID, VALOR, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
    VALUES(L_SECUENCIA_ID,L_OPERACION_ID,DENO.DENOMINACION_ID,DENO.MONTO,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  END LOOP;
  
  --1.4.- ACTUALIZAMOS EL ESTADO DE LA CAJA
  UPDATE CONNEG.CAJA
  SET    APERTURA_ID = L_OPERACION_ID,
         ESTADO_ID   = G_ESTADO_CAJA_APERTURADA
  WHERE  CAJA_ID     = OPE.CAJA_ID;
END LOOP;

--2.- CONFIRMAMOS LA TRANSACCION
COMMIT;

END;

/***************************************************************************************************
-- CIERRE
****************************************************************************************************/

PROCEDURE SP_CIERRE_CARGAR(P_OFICINA_ID IN VARCHAR2, P_TERMINAL_ID IN VARCHAR2, P_TIPO_ID IN INTEGER, P_CAJAS_RS OUT SYS_REFCURSOR, P_MONTOS_RS OUT SYS_REFCURSOR)
IS
BEGIN

OPEN P_CAJAS_RS
FOR
SELECT NVL(CAJ.CAJA_ID, 0)          cajaId,
       DIV.DIVISA_ID                divisaId,
       NVL(CAJ.ESTADO_ID, G_ESTADO_CAJA_POR_APERTURAR) estadoId,
       (CASE WHEN CAJ.ESTADO_ID = 1 THEN NVL(CIE.MONTO_DETERIORADO,0) ELSE NVL(APE.MONTO_DETERIORADO,0) END) montoDeteriorados,
       (CASE WHEN CAJ.ESTADO_ID = 1 THEN NVL(CIE.PATRON_CALIDAD,0)    ELSE NVL(APE.PATRON_CALIDAD,0)    END) patronCalidad,
       NVL(APE.MONTO_TOTAL,0)+NVL(OPE.TOTAL,0) montoTotal
FROM   (
       SELECT CODIGOPARAMETRO DIVISA_ID FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
       ) DIV
       LEFT JOIN
       (
       SELECT * FROM CONNEG.CAJA WHERE OFICINA_ID = P_OFICINA_ID AND TERMINAL_ID = P_TERMINAL_ID AND TIPO_ID = P_TIPO_ID
       ) CAJ
ON     DIV.DIVISA_ID = CAJ.DIVISA_ID
       LEFT JOIN
       (
       SELECT CAJ.CAJA_ID, NVL(SUM(OPE.IMPORTE*TRA.VALOROPERACION), 0) TOTAL
       FROM   CONNEG.CAJA CAJ,
              CONNEG.OPERACIONEFECTIVO OPE,
              CONNEG.TRANSACCION TRA
       WHERE  CAJ.OFICINA_ID  = P_OFICINA_ID 
       AND    CAJ.TERMINAL_ID = P_TERMINAL_ID
       AND    CAJ.TIPO_ID     = P_TIPO_ID
       AND    OPE.CAJA_ID     = CAJ.CAJA_ID
       AND    OPE.CODIGOTRANSACCION = TRA.CODIGOTRANSACCION 
       GROUP BY CAJ.CAJA_ID
       ) OPE
ON     CAJ.CAJA_ID = OPE.CAJA_ID
       LEFT JOIN
       CONNEG.CAJA_OPERACION APE
ON     CAJ.APERTURA_ID = APE.OPERACION_ID
       LEFT JOIN
       CONNEG.CAJA_OPERACION CIE
ON     CAJ.CIERRE_ID = CIE.OPERACION_ID;

OPEN P_MONTOS_RS
FOR
SELECT DEN.DENOMINACION_ID /*NVL(DIV.SECUENCIA_ID,0)*/ secuenciaId,
       NVL(CAJ.CAJA_ID,0)      cajaId,
       PDV.DIVISA_ID           divisaId,
       TIP.CODIGOPARAMETRO     tipoId,
       DEN.VALOR_TEXTO         valorTexto,
       DEN.VALOR_NUMERICO      valorNumerico,
       NVL(DIV.VALOR,0)        valorIngresado
FROM   (
       SELECT CODIGOPARAMETRO DIVISA_ID FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
       ) PDV
       LEFT JOIN
       (
       SELECT * FROM CONNEG.CAJA WHERE OFICINA_ID = P_OFICINA_ID AND TERMINAL_ID = P_TERMINAL_ID AND TIPO_ID = P_TIPO_ID
       ) CAJ
ON     PDV.DIVISA_ID = CAJ.DIVISA_ID
       LEFT JOIN
       CONNEG.DIVISA_DENOMINACION DEN
ON     DEN.DIVISA_ID = PDV.DIVISA_ID
       LEFT JOIN
       CONNEG.CAJA_OPERACION_DIVDEN DIV
ON     DIV.OPERACION_ID    = CAJ.CIERRE_ID
AND    DIV.DENOMINACION_ID = DEN.DENOMINACION_ID
       LEFT JOIN
       CONNEG.PARAMETRO TIP
ON     DEN.TIPO_ID         = TIP.CODIGOPARAMETRO
ORDER BY 1, DEN.TIPO_ID, DEN.VALOR_NUMERICO DESC;

END;

PROCEDURE SP_CIERRE_GRABAR (
  P_XML         IN CLOB,
  P_USUARIO_REG IN VARCHAR2,
  P_FECHA_REG   IN DATE,
  P_ERROR      OUT VARCHAR2
)
IS
  L_OPERACION_ID INTEGER;
  L_SECUENCIA_ID INTEGER;
  L_CAJA_TRASPASO_ID INTEGER;
  L_CAJA_ESTADO_ID INTEGER;
BEGIN

--1.- RECORREMOS LAS OPERACIONES DE LA CAJA PARA REGISTRARLAS
FOR OPE IN
(
SELECT extractValue(value(T), 'CAJA/CAJA_ID')     CAJA_ID,
       extractValue(value(T), 'CAJA/DIVISA_ID')   DIVISA_ID,
       extractValue(value(T), 'CAJA/TERMINAL_ID') TERMINAL_ID,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_DET'),  G_FORMATO_NUMERO) MONTO_DET,
       TO_NUMBER(extractValue(value(T), 'CAJA/PATRON_CAL'), G_FORMATO_NUMERO) PATRON_CAL,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_TOT'),  G_FORMATO_NUMERO) MONTO_TOT
FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA'))) T
)
LOOP
  
  --1.1.- REGISTRAMOS LA OPERACION DE LA CAJA
  SELECT CONNEG.SQ_CAJA_OPE.NEXTVAL INTO L_OPERACION_ID FROM DUAL;
  
  INSERT INTO CONNEG.CAJA_OPERACION (OPERACION_ID, CAJA_ID, TRANSACCION_ID, MONTO_DETERIORADO, PATRON_CALIDAD, MONTO_TOTAL, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
  VALUES (L_OPERACION_ID,OPE.CAJA_ID,G_TRANSACCION_CIERRE,OPE.MONTO_DET,OPE.PATRON_CAL,OPE.MONTO_TOT,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  
  --1.2.- REGISTRAMOS LOS MONTOS DE LAS DENOMINACIONES DE LA OPERACION
  FOR DENO IN
  (
  SELECT extractValue(value(T), 'DENOMINACION/DENOMINACION_ID') DENOMINACION_ID,
         TO_NUMBER(extractValue(value(T), 'DENOMINACION/MONTO'),  G_FORMATO_NUMERO) MONTO
  FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA/DENOMINACIONES/DENOMINACION'))) T
  )
  LOOP
    SELECT CONNEG.SQ_CAJA_OPE_DD.NEXTVAL INTO L_SECUENCIA_ID FROM DUAL;
    
    INSERT INTO CONNEG.CAJA_OPERACION_DIVDEN (SECUENCIA_ID, OPERACION_ID, DENOMINACION_ID, VALOR, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
    VALUES(L_SECUENCIA_ID,L_OPERACION_ID,DENO.DENOMINACION_ID,DENO.MONTO,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  END LOOP;
  
  --1.3.- ACTUALIZAMOS EL ESTADO DE LA CAJA
  UPDATE CONNEG.CAJA
  SET    CIERRE_ID = L_OPERACION_ID,
         ESTADO_ID   = G_ESTADO_CAJA_CERRADA
  WHERE  CAJA_ID     = OPE.CAJA_ID;
END LOOP;

--2.- CONFIRMAMOS LA TRANSACCION
COMMIT;

END;

/***************************************************************************************************
-- TRASPASO
****************************************************************************************************/

PROCEDURE SP_TRASPASO_CARGAR (
  P_OFICINA_ID IN VARCHAR2, 
  P_TERMINAL_ID IN  VARCHAR2,
  P_TIPO_ID     IN  INTEGER,
  P_CAJAS_RS    OUT SYS_REFCURSOR,
  P_REMESAS_RS  OUT SYS_REFCURSOR
)
IS
BEGIN

OPEN P_REMESAS_RS
FOR
SELECT ING.CODIGOTERMINAL TERMINAL_ID, CODIGOTERMINAL || ' - ' || ING.CODIGOUSUARIO DESCRIPCION
FROM   CONNEG.registroingreso ING
WHERE  ING.CODIGOTERMINAL != P_TERMINAL_ID
AND    ING.CODIGOOFICINA   = P_OFICINA_ID
AND    TO_CHAR(ING.FECHAREGISTRO, 'YYYYMMDD') = TO_CHAR(SYSDATE, 'YYYYMMDD');
/*
SELECT ING.CODIGOTERMINAL TERMINAL_ID, CODIGOTERMINAL || ' - ' || ING.CODIGOUSUARIO DESCRIPCION
FROM   CONNEG.USUARIO USU,
       CONNEG.registroingreso ING
WHERE  USU.TERMINAL_ID     = P_TERMINAL_ID
AND    ING.CODIGOOFICINA   = USU.CODIGOOFICINA
AND    ING.CODIGOTERMINAL != P_TERMINAL_ID
AND    TO_CHAR(ING.FECHAREGISTRO, 'YYYYMMDD') = TO_CHAR(SYSDATE, 'YYYYMMDD');
*/
OPEN P_CAJAS_RS
FOR
SELECT NVL(CAJ.CAJA_ID,0) cajaId,
       DIV.DIVISA_ID      divisaId,
       NVL(CAJ.ESTADO_ID, G_ESTADO_CAJA_POR_APERTURAR) estadoId
FROM   (
       SELECT CODIGOPARAMETRO DIVISA_ID FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
       ) DIV
       LEFT JOIN
       CONNEG.CAJA CAJ
ON     CAJ.TERMINAL_ID = P_TERMINAL_ID
AND    CAJ.TIPO_ID     = P_TIPO_ID
AND    CAJ.DIVISA_ID   = DIV.DIVISA_ID;

END;
/********************************************************************************************************************
 *
 ********************************************************************************************************************/
PROCEDURE SP_TRASPASO_GRABAR (
  P_XML         IN CLOB,
  P_USUARIO_REG IN VARCHAR2,
  P_FECHA_REG   IN DATE,
  P_ERROR      OUT VARCHAR2
)
IS
  L_OPERACION_ID INTEGER;
  L_SECUENCIA_ID INTEGER;
  L_CAJA_TRASPASO_ID INTEGER;
  L_CAJA_ESTADO_ID INTEGER;
BEGIN

--1.- RECORREMOS LAS OPERACIONES DE LA CAJA PARA REGISTRARLAS
FOR OPE IN
(
SELECT extractValue(value(T), 'CAJA/CAJA_ID')     CAJA_ID,
       extractValue(value(T), 'CAJA/DIVISA_ID')   DIVISA_ID,
       extractValue(value(T), 'CAJA/TERMINAL_ID') TERMINAL_ID,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_DET'),  G_FORMATO_NUMERO) MONTO_DET,
       TO_NUMBER(extractValue(value(T), 'CAJA/PATRON_CAL'), G_FORMATO_NUMERO) PATRON_CAL,
       TO_NUMBER(extractValue(value(T), 'CAJA/MONTO_TOT'),  G_FORMATO_NUMERO) MONTO_TOT,
       extractValue(value(T), 'CAJA/TERMINAL_TRASPASO_ID') TERMINAL_TRASPASO_ID
FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA'))) T
)
LOOP
  --1.0.- REALIZAMOS ALGUNAS VALIDACIONES
  BEGIN
  SELECT CAJA_ID, ESTADO_ID INTO L_CAJA_TRASPASO_ID, L_CAJA_ESTADO_ID
  FROM   CONNEG.CAJA 
  WHERE  TERMINAL_ID = OPE.TERMINAL_TRASPASO_ID
  AND    DIVISA_ID   = OPE.DIVISA_ID;
  
  EXCEPTION
  WHEN OTHERS THEN
  BEGIN
    P_ERROR := 'El estado de la caja del terminal no se encuentra aperturada para la divisa seleccionada';
    RETURN;
  END;
  END;
  
  IF L_CAJA_ESTADO_ID != G_ESTADO_CAJA_APERTURADA THEN
    P_ERROR := 'El estado de la caja del terminal no se encuentra aperturada para la divisa seleccionada';
    RETURN;
  END IF;
  
  --1.1.- REGISTRAMOS LA OPERACION DE LA CAJA
  SELECT CONNEG.SQ_CAJA_OPE.NEXTVAL INTO L_OPERACION_ID FROM DUAL;
  
  INSERT INTO CONNEG.CAJA_OPERACION (OPERACION_ID, CAJA_ID, TRANSACCION_ID, MONTO_DETERIORADO, PATRON_CALIDAD, MONTO_TOTAL, CAJA_TRASPASO_ID, ESTADO_TRASPASO_ID, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
  VALUES (L_OPERACION_ID,OPE.CAJA_ID,G_TRANSACCION_TRASPASO,OPE.MONTO_DET,OPE.PATRON_CAL,OPE.MONTO_TOT,L_CAJA_TRASPASO_ID,G_ESTADO_TRASPASO_CAJA_SALIDA,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  
  --1.2.- REGISTRAMOS LOS MONTOS DE LAS DENOMINACIONES DE LA OPERACION
  FOR DENO IN
  (
  SELECT extractValue(value(T), 'DENOMINACION/DENOMINACION_ID') DENOMINACION_ID,
         TO_NUMBER(extractValue(value(T), 'DENOMINACION/MONTO'),  G_FORMATO_NUMERO) MONTO
  FROM   table(XMLSequence(extract(xmlType(P_XML),'/ROOT/CAJA/DENOMINACIONES/DENOMINACION'))) T
  )
  LOOP
    SELECT CONNEG.SQ_CAJA_OPE_DD.NEXTVAL INTO L_SECUENCIA_ID FROM DUAL;
    
    INSERT INTO CONNEG.CAJA_OPERACION_DIVDEN (SECUENCIA_ID, OPERACION_ID, DENOMINACION_ID, VALOR, USUARIO_CREACION, FECHA_CREACION, USUARIO_MODIFICACION, FECHA_MODIFICACION)
    VALUES(L_SECUENCIA_ID,L_OPERACION_ID,DENO.DENOMINACION_ID,DENO.MONTO,P_USUARIO_REG,P_FECHA_REG,P_USUARIO_REG,P_FECHA_REG);
  END LOOP;
  
  --1.3.- ACTUALIZAMOS EL ULTIMO TRASPASO DE LA CAJA
  UPDATE CONNEG.CAJA
  SET    TRASPASO_ID = L_OPERACION_ID
  WHERE  CAJA_ID     = OPE.CAJA_ID;
END LOOP;

--2.- CONFIRMAMOS LA TRANSACCION
COMMIT;

END;

PROCEDURE SP_CONFIRMACION_CARGAR (P_OFICINA_ID IN VARCHAR2, P_TERMINAL_ID IN VARCHAR2, P_TIPO_ID INTEGER, P_CONFIRMACIONES_RS OUT SYS_REFCURSOR)
IS
BEGIN
COMMIT;/*
OPEN P_CONFIRMACIONES_RS
FOR
SELECT ING.CODIGOTERMINAL TERMINAL_ID, CODIGOTERMINAL || ' - ' || ING.CODIGOUSUARIO DESCRIPCION
FROM   CONNEG.registroingreso ING
WHERE  ING.CODIGOTERMINAL != P_TERMINAL_ID
AND    ING.CODIGOOFICINA   = L_OFICINA_ID
AND    TO_CHAR(ING.FECHAREGISTRO, 'YYYYMMDD') = TO_CHAR(SYSDATE, 'YYYYMMDD');
*/
END;

PROCEDURE SP_REGISTRAR_CAJAS_TERMINAL (
  P_TERMINAL_ID  IN CHAR,
  P_TIPO_CAJA_ID IN INTEGER,
  P_USUARIO_REG  IN VARCHAR2,
  P_FECHA_REG    IN DATE
)
IS
  L_CAJA_ID  INTEGER;
  L_CANTIDAD INTEGER;
BEGIN

FOR DIVISA IN (
  SELECT CODIGOPARAMETRO DIVISA_ID, DESCRIPCION FROM CONNEG.PARAMETRO WHERE CODIGOTIPOPARAMETRO = 2
)  
LOOP
  SELECT COUNT(1) INTO L_CANTIDAD FROM CONNEG.CAJA 
  WHERE  TERMINAL_ID = P_TERMINAL_ID 
  AND    DIVISA_ID = DIVISA.DIVISA_ID;
  
  IF L_CANTIDAD = 0 THEN
    SELECT CONNEG.SQ_CAJA.NEXTVAL INTO L_CAJA_ID FROM DUAL;
    
    INSERT INTO CONNEG.CAJA (CAJA_ID, TIPO_ID, TERMINAL_ID, DIVISA_ID, APERTURA_ID, CIERRE_ID, ESTADO_ID)
    VALUES (L_CAJA_ID,P_TIPO_CAJA_ID,P_TERMINAL_ID,DIVISA.DIVISA_ID, NULL, NULL, G_ESTADO_CAJA_POR_APERTURAR);
  END IF;
END LOOP;

END;

PROCEDURE SP_SALDO_OBTENER(P_CUENTA IN VARCHAR2, P_SALDO OUT SYS_REFCURSOR)
  IS
BEGIN

OPEN P_SALDO
FOR
SELECT 
 S.CODIGOSECUENCIAL, 
   S.CODIGOCENTROALTA, 
	 S.NUMEROCUENTA, 
	S.DIGITOCONTROL1, 
	S.DIGITOCONTROL2, 
	S.TIPOREGISTRO, 
	S.CODIGOPRODUCTO, 
	S.CODIGOSUBPRODUCTO, 
	S.CODIGODIVISA, 
	S.CODIGOCENTROCUENTA, 
	S.CODCENTROCONTABLE, 
	S.SALDODISPONIBLE, 
	S.SALDOCONTABLE, 
	S.INDICADORTARIFA, 
	S.CODIGOTARIFA, 
	S.INDICADORACEPTACTA, 
	S.INDICADORSITUACIONCTA, 
	S.INDICADORCONDICIONCTA 
FROM  ENTRADACUENTA S
WHERE S.NUMEROCUENTA = P_CUENTA;

END;

END PQ_OPERATORIA;
/
 
